#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
sigset_t set;
sigset_t oldset;
void handler1(int sig){
    printf("收到了%d的信号~\n",sig);
}

void handler2(int sig){
    sigset_t sigpset;
    sigpending(&sigpset);
    int i = 1;
    for(;i<65;i++){
        if(sigismember(&sigpset, i)==1){
            printf("此%d信号正处于未决状态\n",i);
        }
    }
    sigprocmask(SIG_SETMASK, &oldset, NULL);//解除信号掩码
}

int main()
{
    printf("进程：%d\n",getpid());
    sigemptyset(&set);
    //不可靠信号：多个相同的信号，只会保留一个，后面的将会被忽略
    sigaddset(&set, 2);
    sigaddset(&set, 3);
    sigaddset(&set, 4);
    //可靠信号
    sigaddset(&set, 40);
    sigaddset(&set, 41);
    sigaddset(&set, 42);
    signal(2, handler1);
    signal(3, handler1);
    signal(4, handler1);


    signal(40, handler1);
    signal(41, handler1);
    signal(42, handler1);

    signal(5,handler2);//收到信号5，将会解除信号掩码
    int ret = sigprocmask(SIG_SETMASK, &set, &oldset);//更改信号掩码
    if(ret==-1){
        perror("sigmask fail");
        exit(1);
    }
    while(1);
    sigprocmask(SIG_SETMASK, &oldset, NULL);//恢复
    return 0;
}